MediaWiki:Gadget-TagFilterDeluxe.js
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./* {{Catégorisation JS|TagFilterDeluxe}} */
if (['Recentchanges', 'Recentchangeslinked', 'Log', 'Newpages', 'Contributions'].includes(mw.config.get('wgCanonicalSpecialPageName'))) {
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.storage'], function () {
$(function ($) {
// /////////////////////////////////////////// LANCEMENT
getFilters().then(createOptions);
// /////////////////////////////////////////// RECHERCHE DES FILTRES EXISTANTS
function getFilters() {
function requestFilters(deferred, filterList, apicontinue) {
if (!filterList) filterList = [];
var queryopt = {
action : 'query',
list : 'tags',
tgprop : 'active',
tglimit : 500,
formatversion : 2,
};
if (apicontinue) Object.assign(queryopt, apicontinue);
var api = new mw.Api();
api.get(queryopt).then(function (data) {
var tags = data.query.tags;
for (var a = 0; a < tags.length; a++) {
var thistag = tags[a];
if (!thistag.active) continue;
filterList.push(thistag.name);
}
if (data['continue']) {
requestFilters(deferred, filterList, data['continue']);
return;
}
mw.storage.set('TagFilterDeluxe_filterList', filterList.join('|'), 86400); // 86400 secondes = 24 heures
deferred.resolve(filterList);
});
}
var deferred = $.Deferred();
var cachedData = mw.storage.get('TagFilterDeluxe_filterList');
if (cachedData) {
var filterList = cachedData.split('|');
deferred.resolve(filterList);
} else {
requestFilters(deferred);
}
return deferred.promise();
}
// /////////////////////////////////////////// MODIF OPTIONS
function createOptions(filterList) {
var inputs = document.getElementsByTagName('input');
for (var a = 0, l = inputs.length; a < l; a++) {
if (!inputs[a].name) continue;
if (inputs[a].name === 'tagfilter' && inputs[a].type === 'text') {
var select = document.createElement('select');
select.name = 'tagfilter';
var firstOption = document.createElement('option');
firstOption.value = '';
firstOption.textContent = '* Aucune *';
select.appendChild(firstOption);
var activeFilter = getActiveFilter();
for (var b = 0; b < filterList.length; b++) {
var option = document.createElement('option');
option.value = filterList[b];
option.textContent = filterList[b];
if (filterList[b] === activeFilter) {
option.selected = 'selected';
}
select.appendChild(option);
}
inputs[a].parentNode.replaceChild(select, inputs[a]);
}
}
}
// /////////////////////////////////////////// RECHERCHE FILTRE ACTIF DANS L'URL
function getActiveFilter() {
var filter = mw.util.getParamValue('tagfilter');
if (filter) {
return filter;
}
return false;
}
});
});
}